#define _CRT_SECURE_NO_WARNINGS 1

//#include<iostream>
//#include<queue>
//
//using namespace std;
//
//const int N = 1010;
//
//typedef pair<int, int> PII;
//
//bool st[N][N];
//char g[N][N];
//int n, m;
//
//int dx[8] = { 0,0,1,1,1,-1,-1,-1 };
//int dy[8] = { 1,-1,0,1,-1,0,1,-1 };
//
//void bfs(int i, int j)
//{
//    queue<PII> q;
//    q.push({ i,j });
//    st[i][j] = true;
//    while (!q.empty())
//    {
//        int a = q.front().first, b = q.front().second;
//        q.pop();
//        for (int x = a - 1; x <= a + 1; x++)
//            for (int y = b - 1; y <= b + 1; y++)
//            {
//                if (x == a && y == b)    continue;
//                if (x >= 0 && y >= 0 && x < n && y < m)
//                {
//                    if (g[x][y] == 'W' && !st[x][y])
//                    {
//                        st[x][y] = true;
//                        q.push({ x,y });
//                    }
//                }
//            }
//    }
//}
//
//int main()
//{
//    scanf("%d%d", &n, &m);
//    for (int i = 0; i < n; i++)   scanf("%s", &g[i]);
//
//    int res = 0;
//    for (int i = 0; i < n; i++)
//        for (int j = 0; j < m; j++)
//            if (g[i][j] == 'W' && !st[i][j])
//            {
//                res++;
//                bfs(i, j);
//            }
//    printf("%d\n", res);
//    return 0;
//}

#include<iostream>
#include<queue>

using namespace std;

typedef pair<int, int> PII;

const int N = 55;

bool st[N][N];
int g[N][N];
int n, m;

int dx[4] = { 0,-1,0,1 };
int dy[4] = { -1,0,1,0 };

int bfs(int sx, int sy)
{
    int cnt = 0;
    queue<PII> q;
    q.push({ sx,sy });
    st[sx][sy] = true;
    while (!q.empty())
    {
        int a = q.front().first, b = q.front().second;
        cnt++;
        q.pop();
        for (int i = 0; i < 4; i++)
        {
            if (!(g[a][b] >> i & 1))
            {
                int x = a + dx[i], y = b + dy[i];
                if (x < 0 || y < 0 || x >= n || y >= m)  continue;
                if (st[x][y])    continue;

                q.push({ x,y });
                st[x][y] = true;
            }
        }
    }
    return cnt;
}

int main()
{
    scanf("%d%d", &n, &m);

    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            scanf("%d", &g[i][j]);

    int res = 0;
    int nmax = 0;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            if (!st[i][j])
            {
                nmax = max(nmax, bfs(i, j));
                res++;
            }
        }
    printf("%d\n%d\n", res, nmax);
    return 0;
}